Kotlin Koans 06 Data classes

Contents

Data classes (Playground)

Description

Rewrite the following Java code to Kotlin:

次のJavaコードをKotlinに書き換えてください。

public class Person {
    private final String name;
    private final int age;

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public int getAge() {
        return age;
    }
}

Then add a modifier data to the resulting class. This annotation means the compiler will generate a bunch of useful methods in this class: equals/hashCode, toString and some others. The getPeople function should start to compile.

Read about classes, properties and data classes.

次に、結果のクラスにdata修飾子を追加してください。これは、コンパイラがequals/hashCode, toStringなどの多くの有用なメソッドを生成することを表します。 getPeople関数のコンパイルが通るはずです。

クラス, プロパティ, データクラスを読んでください。

Code

data class Person(val name: String, val age: Int)

fun getPeople(): List<Person> {
    return listOf(Person("Alice", 29), Person("Bob", 31))
}

Memo

  • dataクラス
    • Kotlinではデータを保持するためだけのクラスを、date修飾子でマークできる
    • dataクラスには、プライマリコンストラクタで宣言されたすべてのプロパティから以下のメンバを自動的に派生される(明示的な実装がある場合は、関数は生成されずに既存の実装が使用される)
      • equals() ... dataクラスのオブジェクトを比較する
      • hashCode() ... dataクラスのオブジェクトのハッシュコードを返す
      • toString() ... "User(name=John, age=42)"形式の文字列を返す
      • componentN() ... 宣言がN番目のcomponentを返す
      • copy() ... dataクラスのオブジェクトをコピーする。一部のプロパティだけ変更してコピーする必要がある場合に便利

通常クラスとdataクラスの実装の違いには意識しておく必要がある。

参考

data classで配列を使う時はequalsをオーバーライドしよう [Kotlin]

← Posts